module.exports = (app) => {
  const { config } = app

  const { dict, constant } = config
  const { ORDER_STATE_AWAIT_PAY } = constant
  const { Schema, model, getModelName, formatDate } = app.jax.mongoose
  const modelName = getModelName(__filename)

  const schema = new Schema({
    adminId: Schema.Types.ObjectId, // 管理员ID
    orderNo: { type: String }, // 订单号
    outTradeNo: String, // 外部订单号
    game: String, // 游戏
    gameArea: String, // 游戏大区
    location: String, // 位置 省/市/区
    // province: String, // 省份
    // city: String, // 城市
    // district: String, // 区
    // point: String, // 坐标点(经纬度) 117.013467,30.553616
    pushState: { type: Number, default: 0 }, // 推送状态 0、待接收 1、已接收
    pushTime: Date,
    pushNum: { type: Number, default: 0 }, // 推送次数
    orderState: { type: Number, default: 0 }, // 订单状态
    qrcodeState: { type: Number, default: 0 }, // 二维码状态
    // qrcode: String, // 二维码图
    resultState: { type: Number, default: 0 }, // 结果状态 0、等待结果 1、成功 2、失败（未知错误）
    resultImage: String, // 结果截图
    reason: String, // 原因
    isAppointment: { type: Boolean, default: false }, // 是否预约
  })

  schema.virtual('gameAreaDesc').get(function () {
    const data = {
      ios_wx: '苹果微信',
      android_wx: '安卓微信',
      ios_qq: '苹果QQ',
      android_qq: '安卓QQ',
    }

    return data[this.gameArea] || '未知'
  })

  schema.virtual('orderStateDesc').get(function () {
    const data = {
      0: '待扫码', // 已下发-待扫描
      1: '待处理', // 已扫码-待处理
      2: '处理中', // 已扫码-处理中
      3: '处理完成', // 已扫码-处理完成
      4: '处理失败', // 已扫码-处理失败
    }

    return data[this.orderState] || '未知'
  })

  schema.virtual('qrcodeStateDesc').get(function () {
    const data = {
      0: '待获取', // 等待获取二维码
      1: '扫码中',
      2: '扫描完成',
    }

    return data[this.qrcodeState] || '未知'
  })

  schema.virtual('h5').get(function () {
    return config.h5 + '/order/detail?outTradeNo=' + this.outTradeNo
  })

  const Model = model(modelName, schema)

  return Model
}
